import type { PayParams, UploadImage, UserData } from '@/types/user'
import { request } from '@/utils/http'

// login登录 register注册 changeMobile更换手机号 forgetPassword找回密码 bindMobile绑定三方登录，区分验证码
type CodeType = 'login' | 'register' | 'changeMobile' | 'forgetPassword' | 'bindMobile'

/** 查询参数类型定义 */
interface GetCodeParams {
  /** 手机号 */
  mobile: string
  /** 通过联合类型约束 type 的参数取值 */
  type: CodeType
}

type GetCodeData = {
  /** 测试用的验证码 */
  code: string
}

/**
 * 获取验证码
 *
 * @param params 查询参数
 * @returns Promise对象
 */
export const getCodeApi = (params: GetCodeParams) => {
  return request.get<null, GetCodeData>('/code', {
    params: params,
  })
}

/** 参数类型定义 */
interface LoginCodeParams {
  /** 手机号 */
  mobile: string
  /** 验证码 */
  code: string
}

/** 参数类型定义 */
interface LoginPasswordParams {
  /** 手机号 */
  mobile: string
  /** 验证码 */
  password: string
}
export interface LoginCodeData {
  /** 用户名 */
  account?: string
  /**
   * 头像
   */
  avatar?: string
  /**
   * 用户id
   */
  id: string
  /**
   * 脱敏手机号，带星号的手机号
   */
  mobile?: string
  /**
   * refreshToken
   */
  refreshToken: string
  /**
   * token
   */
  token: string
}

/** 登录--手机验证码登录 */
export const loginByMobileApi = (data: LoginCodeParams) => {
  return request.post<null, LoginCodeData>('/login', data)
}

/**
 * 我的-获取个人用户信息
 * @returns
 */
export const userInfoApi = () => {
  return request.get<null, UserData>('/patient/myUser')
}

/**
 * 上传文件/图片
 * @param filePath
 * @returns
 */

export const uploadImageApi = (filePath: string) => {
  // 小程序需调用通过 uni.uploadFile 上传资源，客户端发起一个 POST 请求
  return request.upload<null, UploadImage>('/upload', {
    name: 'file', // 服务器的 key
    filePath: filePath, // 上传文件资源的路径(沙箱路径)，上传时会自动转换成二进制
  })
}
export const loginPasswordApi = (data:LoginPasswordParams)=>{
  return request.post<null, LoginCodeData>('/login/password',data)
}
/**
 * 三方支付（暂时只支持支付宝支付）
 */
export const orderPayApi = (data: PayParams) => {
  return request.post<null, { payUrl: string }>('/patient/consult/pay', data)
}